import sqlite3
import os


def create_sqlite_db():
    # 指定数据库文件路径（例如：在当前目录下的data文件夹中创建test.db）
    db_dir = "data"  # 目录名
    db_name = "test.db"  # 数据库文件名
    db_path = os.path.join(db_dir, db_name)  # 组合路径

    # 如果目录不存在则创建
    if not os.path.exists(db_dir):
        os.makedirs(db_dir)
        print(f"已创建目录: {db_dir}")

    try:
        # 连接数据库（如果文件不存在会自动创建）
        conn = sqlite3.connect(db_path)
        print(f"已在 {db_path} 创建/连接数据库")

        # 创建游标对象
        cursor = conn.cursor()

        # 创建表（示例：用户表users）
        create_table_sql = """
        CREATE TABLE IF NOT EXISTS users (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            name TEXT NOT NULL,
            age INTEGER,
            email TEXT UNIQUE
        )
        """
        cursor.execute(create_table_sql)
        print("已创建users表")

        # 提交事务
        conn.commit()

    except sqlite3.Error as e:
        print(f"数据库操作出错: {e}")
    finally:
        # 关闭连接
        if conn:
            conn.close()
            print("数据库连接已关闭")

def init_sqlite_db():
    # 指定数据库文件路径（例如：在当前目录下的data文件夹中创建test.db）
    db_dir = "data"  # 目录名
    db_name = "test.db"  # 数据库文件名
    db_path = os.path.join(db_dir, db_name)  # 组合路径

    try:
        # 连接数据库（如果文件不存在会自动创建）
        conn = sqlite3.connect(db_path)
        print(f"已在 {db_path} 创建/连接数据库")

        # 创建游标对象
        cursor = conn.cursor()

        # 创建表（示例：用户表users）
        create_table_sql = """
        CREATE TABLE IF NOT EXISTS users (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            name TEXT NOT NULL,
            age INTEGER,
            email TEXT UNIQUE
        )
        """
        cursor.execute(create_table_sql)
        print("已创建users表")

        # 提交事务
        conn.commit()

    except sqlite3.Error as e:
        print(f"数据库操作出错: {e}")
    finally:
        # 关闭连接
        if conn:
            conn.close()
            print("数据库连接已关闭")

def add_name_column_if_missing(db_path):
    try:
        # 连接数据库
        conn = sqlite3.connect(db_path)
        cursor = conn.cursor()

        # 1. 先判断表users是否存在
        cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='users'")
        table_exists = cursor.fetchone() is not None

        if not table_exists:
            print("表users不存在，无需操作")
            return

        # 2. 查询表users的所有列信息
        cursor.execute("PRAGMA table_info(users)")
        columns = cursor.fetchall()  # 返回结果格式：(cid, name, type, notnull, dflt_value, pk)

        # 提取所有列名
        column_names = [col[1] for col in columns]

        # 3. 判断name列是否存在
        if 'name' not in column_names:
            # 不存在则添加name列（TEXT类型，字符串）
            cursor.execute("ALTER TABLE users ADD COLUMN name TEXT")
            conn.commit()
            print("已成功为users表添加name列")
        else:
            print("users表已存在name列，无需操作")

    except sqlite3.Error as e:
        print(f"数据库操作出错: {e}")
    finally:
        if conn:
            conn.close()

if __name__ == "__main__":
    create_sqlite_db()
